package cn.kgc.crowdfundingadminspringboot3.service;

import cn.kgc.crowdfundingadminspringboot3.common.CrowdFundingUtils;
import cn.kgc.crowdfundingadminspringboot3.mapper.AdminMapper;
import cn.kgc.crowdfundingadminspringboot3.pojo.Admin;
import cn.kgc.crowdfundingadminspringboot3.pojo.AdminExample;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class AdminServiceImpl implements AdminService {

    @Resource
    AdminMapper adminMapper;

    @Resource
    BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    public Admin selectByPrimaryKey(Integer id) {
        return adminMapper.selectByPrimaryKey(id);
    }

    @Override
    public Admin login(String loginAcct, String userPswd) {
        Admin admin = null;
        AdminExample adminExample = new AdminExample();
        AdminExample.Criteria criteria = adminExample.createCriteria();
        criteria.andLoginacctEqualTo(loginAcct);
        List<Admin> list = adminMapper.selectByExample(adminExample);
        if (CrowdFundingUtils.collectionEffective(list)) {
            admin = list.get(0);
            //对明文进行加密
            String md5userPswd = CrowdFundingUtils.md5(userPswd);
            //对比密文
            if (md5userPswd.equals(admin.getUserpswd())) {
                return admin;
            } else {
                admin = null;
            }
        }
        return admin;
    }

    @Override
    public PageInfo<Admin> queryForKeywordSearch(Integer pageNum, Integer pageSize, String keyword) {
        PageHelper.startPage(pageNum, pageSize);
        PageInfo<Admin> pageInfo = null;
        if (keyword != null && keyword.length() > 0) {
            AdminExample example = new AdminExample();
            AdminExample.Criteria criteria = example.createCriteria();
            criteria.andLoginacctLike("%" + keyword + "%");

            AdminExample.Criteria criteria2 = example.createCriteria();
            criteria2.andUsernameLike("%" + keyword + "%");
            example.or(criteria2);

            AdminExample.Criteria criteria3 = example.createCriteria();
            criteria3.andEmailLike("%" + keyword + "%");
            example.or(criteria3);
            List<Admin> list = adminMapper.selectByExample(example);
            pageInfo = new PageInfo<>(list);
        } else {
            List<Admin> list = adminMapper.selectByExample(null);
            pageInfo = new PageInfo<>(list);
        }
        return pageInfo;
    }

    @Override
    public void batchRemove(List<Integer> adminIdList) {
        AdminExample example = new AdminExample();
        AdminExample.Criteria criteria = example.createCriteria();
        criteria.andIdIn(adminIdList);

        adminMapper.deleteByExample(example);
    }

    @Override
    public void saveAdmin(Admin admin) {
//        String s = CrowdFundingUtils.md5(admin.getUserpswd());
        String userPswd = bCryptPasswordEncoder.encode(admin.getUserpswd());
        admin.setUserpswd(userPswd);
        adminMapper.insertSelective(admin);
    }

    @Override
    public Admin getAdminById(Integer adminId) {
        return adminMapper.selectByPrimaryKey(adminId);
    }

    @Override
    public void updateAdmin(Admin admin) {
        // 对密码进行加密
        if (CrowdFundingUtils.stringEffective(admin.getUserpswd())) {
            String userPswd = admin.getUserpswd();
//            userPswd = CrowdFundingUtils.md5(userPswd);
            userPswd = bCryptPasswordEncoder.encode(userPswd);
            admin.setUserpswd(userPswd);
        }
        adminMapper.updateByPrimaryKeySelective(admin);
    }
}
